/**
 * 版权所有 @鸿名物联 
 * 未经授权，禁止侵权和商业用途，违法必究
 * 联系QQ：2224313811 
 * 
 */
package com.lp.authority;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.lp.bo.UserInfoBO;
import com.lp.cfg.ProConfig;
import com.lp.util.LogUtil;
import com.lp.util.ObjectUtil;

import me.chanjar.weixin.mp.api.WxMpServiceImpl;

public class WechatAuthorityIntercept {

	/**
	 * 是否是微信浏览器
	 * 
	 * @param request
	 * @return boolean
	 */
	public static boolean isWeixin(HttpServletRequest request) {
		if (((HttpServletRequest) request).getHeader("user-agent") == null) {
			return false;
		}
		String ua = ((HttpServletRequest) request).getHeader("user-agent").toLowerCase();

		if (ua.indexOf("micromessenger") > 0) {
			return true;
		}
		return false;
	}
	
	/**
	 * 微信公众号授权
	 * 0  通过，1 转发其他，-1 跳转到web判断
	 * @param req
	 * @param response
	 * @return
	 */
	public static int AutjorityIntercept(HttpServletRequest req, HttpServletResponse response) {
		// url
		String requestUrl = req.getRequestURL().toString();
		String queryString = req.getQueryString(); 
		// 是否需要微信授权信息
		Boolean is_auth = false ;
		
		if(ObjectUtil.isNotEmpty(queryString)){
			requestUrl+= '?'+queryString.replace("&", "*") ;
		}
		try{
			if ((isWeixin(req)) 
					&& !requestUrl.toString().contains(ProConfig.WEIXIN.MP_OAUTH2_REDIRECT_URI) ) {
				
				UserInfoBO userInfo = (UserInfoBO) req.getSession().getAttribute("user");
				Object openid = req.getSession().getAttribute("open_id") ;
				
				if ( ObjectUtil.isEmpty(userInfo) ) {
					if(requestUrl.contains("login") || requestUrl.contains("login_sms") 
							|| requestUrl.contains("validate/code") || requestUrl.contains("/security_code") ){
						return 0 ;
					}
					
					if( ObjectUtil.isNotEmpty( openid ) ){
						if( requestUrl.contains("/bind") || requestUrl.contains("/cbind") || requestUrl.contains("/register") ){
							return 0 ;
						}else{
							response.sendRedirect(ProConfig.LOCAL_DOMAIN + "/service/wiot/bind");	
							return 1;							
						}
					}else{
						is_auth = true ;						
					}
				}else{
					// 通过用户登录了
					if( requestUrl.contains("/cbind") && ObjectUtil.isEmpty(openid) ){
						is_auth = true ;
					}
				}
				
				if(is_auth){
					/**
					 * 1.构造网页授权url
					 * 以snsapi_base为scope发起的网页授权，是用来获取进入页面的用户的openid的，snsapi_userinfo
					 * / snsapi_base 并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页 生产环境可能需要改成
					 * request_uri / requestUrl
					 * 如果需要关注公众号，则可以使用snsapi_userinfo，就可以不需要关注公众号也能进行信息的绑定
					 */
					String authorization_url =  ((WxMpServiceImpl)(ObjectUtil.Spring.getBean("wxMpService")))
							.oauth2buildAuthorizationUrl("snsapi_userinfo", requestUrl);
					/**
					 * 2.开始发起授权
					 */
					response.sendRedirect(authorization_url);
					return 1 ;
				}
				
				return 0 ;
			}else{
				if( requestUrl.toString().contains(ProConfig.WEIXIN.MP_OAUTH2_REDIRECT_URI) 
							|| requestUrl.toString().contains("/service/weixin/mp/msg")  ){
					return 0 ;
				}
			}
		}catch(Exception e){
			LogUtil.errorLog(e);
			return -1 ;
		}
		return -1 ;
	}
}
